分类
联系方式
  1. 新浪微博
  2. E-mail

Dart eval:Library 实体类

介绍

在 Dart 中,一个源文件可以简单认为就是一个 Library(也是 Dart 术语)。在 dart_eval 中,借助 dart analyzer 的力量,该转化过程为:

  1. Dart 源代码
  2. CompilationUnit(Dart Analyzer 将源码转为 AST)
  3. Dart eval:DeclarationOrBridge 实体类
  4. 《Dart eval:Library 实体类》

到第四步就是比较纯粹的 dart eval 中的概念了。本文分析 Library 的实现,具体实现如下:

class Library {
  Library(this.uri, {required this.imports, required this.exports, required this.declarations, this.library});

  /// A `package`, `dart`, or `file` URI
  final Uri uri;

  /// 是否有 library 声明
  final String? library;

  /// 依赖和导出
  final List<ImportDirective> imports;
  final List<ExportDirective> exports;

  /// 声明
  final List<DeclarationOrBridge> declarations;

  @override
  bool operator ==(Object other) =>
      identical(this, other) 
        || other is Library 
        && runtimeType == other.runtimeType 
        && uri == other.uri;

  @override
  int get hashCode => uri.hashCode;

  /// 复制新 Library 实例,可选:传入一组声明(DeclarationOrBridge)
  Library copyWith({List<DeclarationOrBridge>? declarations}) {
    return Library(uri,
        library: library, imports: imports, exports: exports, declarations: declarations ?? this.declarations);
  }
}